﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DAO;
using APA_DAO;
using TAM_SPORT;

namespace AMS
{
    public partial class FrmChiTieuList : Form
    {
        public FrmChiTieuList()
        {
            InitializeComponent();
            txtStartDate.Text = DateTime.Now.ToString("dd/MM/yyyy");
            txtEndDate.Text = DateTime.Now.ToString("dd/MM/yyyy");
            loadCbxUser();
            loadPhong();
            cbxRoom.SelectedIndex = 0;
            cbxStatus.SelectedIndex = 0;
            dtgResult.ColumnHeadersDefaultCellStyle.BackColor = Color.LightSkyBlue;
            dtgResult.GridColor = Color.BurlyWood;
            dtgResult.EnableHeadersVisualStyles = false;
            loadLoaiChi();
        }


        private void loadPhong()
        {
            PhongDao dao = new PhongDao();
            DataTable table = dao.getPhongWithThuePhong();
            if (table != null)
            {
                DataRow row = table.NewRow();
                row["ID"] = -1;
                row["SO_PHONG"] = "Tất cả các phiếu chi";
                table.Rows.InsertAt(row, 0);

                row = table.NewRow();
                row["ID"] = 0;
                row["SO_PHONG"] = "Tất cả các phiếu chi - cho phòng";
                table.Rows.InsertAt(row, 1);

                cbxRoom.DataSource = table;
                cbxRoom.DisplayMember = "SO_PHONG";
                cbxRoom.ValueMember = "ID";
                cbxRoom.SelectedIndex = 0;
            }
        }

        private void loadCbxUser()
        {
            UserDao dao = new UserDao();
            DataTable table = dao.getUsers(string.Empty);
            if (table != null)
            {
                DataRow row = table.NewRow();
                row["ID"] = 0;
                row["FULL_NAME"] = "Tất cả";
                table.Rows.InsertAt(row, 0);
                cbxUser.DataSource = table;
                cbxUser.DisplayMember = "FULL_NAME";
                cbxUser.ValueMember = "ID";
                if (LoginDao.adminFlag)
                {
                    cbxUser.SelectedIndex = 0;
                    cbxUser.Enabled = true;
                }
                else
                {
                    cbxUser.SelectedValue = LoginDao.userID;
                    cbxUser.Enabled = false;
                }
            }
        }

        private bool validate()
        {
            bool errFlg = false;
            StringBuilder strBuilder = new StringBuilder();
            int i = 0;
            DateTime day;
            if (!DateTime.TryParseExact(txtStartDate.Text, "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None, out day))
            {
                i++;
                strBuilder.Append(i.ToString() + ". Ngày chi tiêu (bắt đầu) sai định dạng ngày/tháng/năm.");
                errFlg = true;
            }

            if (!DateTime.TryParseExact(txtEndDate.Text, "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None, out day))
            {
                i++;
                if (errFlg)
                {
                    strBuilder.Append("\n");
                }
                strBuilder.Append(i.ToString() + ". Ngày chi tiêu (kết thúc) sai định dạng ngày/tháng/năm.");
                errFlg = true;
            }

            if (!string.IsNullOrEmpty(strBuilder.ToString()))
            {
                Error er = new Error(strBuilder.ToString());
                er.ShowDialog();
                er.Dispose();
            }
            return !errFlg;
        }

        private void loadGrid()
        {
            if (validate())
            {
                dtgResult.Rows.Clear();
                int i = 0;
                
                ChiTieuDao dao = new ChiTieuDao();
                DataTable table = dao.getChiTieu(int.Parse(cbxUser.SelectedValue.ToString()),
                    string.IsNullOrEmpty(txtStartDate.Text) ? default(DateTime?) : DateTime.ParseExact(txtStartDate.Text, "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None),
                    string.IsNullOrEmpty(txtEndDate.Text) ? default(DateTime?) : DateTime.ParseExact(txtEndDate.Text, "dd/MM/yyyy", null, System.Globalization.DateTimeStyles.None),
                    int.Parse(cbxRoom.SelectedValue.ToString()),
                    cbxStatus.SelectedIndex,int.Parse(cbxLoaiChi.SelectedValue.ToString()));
                if (table != null)
                {
                    foreach (DataRow row in table.Rows)
                    {
                        i = dtgResult.Rows.Add();
                        dtgResult.Rows[i].Cells[0].Value = i+1;
                        dtgResult.Rows[i].Cells[1].Value = row["NGAY_CHI"] == System.DBNull.Value ? "" : DateTime.Parse(row["NGAY_CHI"].ToString()).ToString("dd/MM/yyyy");
                        dtgResult.Rows[i].Cells[2].Value = row["FULL_NAME"].ToString();
                        dtgResult.Rows[i].Cells[3].Value = row["NAME"].ToString();
                        dtgResult.Rows[i].Cells[4].Value = row["SO_TIEN"] == System.DBNull.Value ? "" : float.Parse(row["SO_TIEN"].ToString()).ToString("#,###.##");
                        dtgResult.Rows[i].Cells[5].Value = row["SO_PHONG"].ToString();
                        dtgResult.Rows[i].Cells[6].Value = row["HO_VA_TEN"].ToString();
                        dtgResult.Rows[i].Cells[7].Value = row["ID"].ToString();
                        dtgResult.Rows[i].Cells[10].Value = row["MA_PHIEU_THU"].ToString();
                        dtgResult.Rows[i].Cells[11].Value = row["NGUOI_CHI"].ToString();
                        if (i % 2 == 1)
                        {
                            dtgResult.Rows[i].DefaultCellStyle.BackColor = Color.LightCyan;
                        }
                    }
                }
            }
        }
        private void dtpStartDate_ValueChanged(object sender, EventArgs e)
        {
            txtStartDate.Text = dtpStartDate.Value.ToString("dd/MM/yyyy");
        }

        private void dtpEndDate_ValueChanged(object sender, EventArgs e)
        {
            txtEndDate.Text = dtpEndDate.Value.ToString("dd/MM/yyyy");
        }

        private void loadLoaiChi()
        {
            ChiTieuDao dao = new ChiTieuDao();
            DataTable table = dao.getLoaiChi(0);
            if (table != null)
            {
                DataRow row = table.NewRow();
                row["ID"] = 0;
                row["NAME"] = "Tất cả";
                table.Rows.InsertAt(row, 0);

                cbxLoaiChi.DataSource = table;
                cbxLoaiChi.DisplayMember = "NAME";
                cbxLoaiChi.ValueMember = "ID";
                cbxLoaiChi.SelectedIndex = 0;
            }
        }

        private void btnView_Click(object sender, EventArgs e)
        {
            loadGrid();
        }

        private void dtgResult_CellClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.RowIndex >= 0)
            {
                int id = int.Parse(dtgResult.Rows[e.RowIndex].Cells[7].Value.ToString());
                int idNguoiChi = int.Parse(dtgResult.Rows[e.RowIndex].Cells[11].Value.ToString());
                if (e.ColumnIndex == 8 || e.ColumnIndex == 9)
                {
                    if (!string.IsNullOrEmpty(dtgResult.Rows[e.RowIndex].Cells[10].Value.ToString()))
                    {
                        Error er = new Error("Phiếu chi này đã được thanh toán bởi khách thuê phòng. Bạn không thể sửa hoặc xóa phiếu chi này.");
                        er.ShowDialog();
                        er.Dispose();
                    }
                    else
                    {
                        if (idNguoiChi != LoginDao.userID)
                        {
                            Error er = new Error("Phiếu chi này được lập bởi nhân viên khác. Bạn không thể sửa hoặc xóa phiếu chi này.");
                            er.ShowDialog();
                            er.Dispose();
                        }
                        else
                        {
                            if (e.ColumnIndex == 8)
                            {
                                FrmChiTieu f = new FrmChiTieu(id);
                                f.ShowDialog();
                                f.Dispose();
                            }
                            if (e.ColumnIndex == 9)
                            {
                                Confirm f = new Confirm("Bạn muốn hủy phiếu chi này?");
                                f.ShowDialog();
                                if (f.IsAccept)
                                {
                                    ChiTieuDao dao = new ChiTieuDao();
                                    if (dao.deleteChiTieu(id))
                                    {
                                        Result re = new Result("Hủy thành công");
                                        re.ShowDialog();
                                        re.Dispose();
                                    }
                                }
                                f.Dispose();
                            }
                        }
                        loadGrid();
                    }
                }               
            }
        }
    }
}
